Sequence Modeling With CTC

关于blank节点

一般CTC需要与RNN或DNN结合使用。DNN与CTC模型在输出层引入一个“blank(空白)”节点,将两个发音单元之间混淆或不确定的区域映射到“blank”节点(传统“固定对齐边界”的方法将该“模糊”区域“强制”分类为左边标签、右边标签或者短停顿,存在天然的缺陷),这样,将传统的“轨迹”建模转化为“差异性”建模,使得模型更加关注一个发音单元与其它发音单元之间的“差异性”,缓减了传统模型需要完整地描述该发音单元全部信息的建模负担,可以参考 [1]

工具包

疑问

tesseract是否采用的CTC方法

CTC是否适用seq2seq问题。

背景

CTC解决的问题是,输入序列和输出序列数目不同的问题。seq2seq(翻译模型)也是这样的。

解答

CTC适用于存在一一对应关系、主要利用局部context信息的问题,比如语音识别、OCR等。
seq2seq则更适用于需要利用全局的context信息的场合,比如翻译,因为经常从局部context得不到足够的信息。

CTC要解决的是sequence labeling的问题。

seq2seq解决的是序列到序列的广义上的翻译问题,看起来是可以解决ctc的问题,但是由于其往往需要把整个输入压成一个fixd-length vector,会导致丢失很多的信息,同时其并没有输入输出的强制对应关系,对于语音识别或者OCR这种任务来说,约束力太弱了,因此虽然这个框架可以执行ctc的任务,但是效果应该不会很好。

https://www.zhihu.com/question/49043625

我的注释

这个问题实质上是在问seq2seq和sequence labeling的区别。前者对生成的序列不需要顺序保持(例如机器翻译),后者是需要顺序保持(例如NER、OCR、语音识别)。

如果用CTC处理翻译模型,基本就是逐字翻译的效果了。貌似还不是这样,CTC是sequence labeling的问题,有序label,顺序不能变。

首先要区分seq2seq和sequence labeling这两个问题。
seq2seq解决的是序列到序列的广义上的翻译问题,

lstm+attention解决seq2seq问题,

参考

paper & blog

code